package com.utf999.qiangmanger.service.iface;

import java.util.List;

import com.utf999.qiangmanger.entity.orm.CompanyEntity;
import com.utf999.qiangmanger.entity.orm.StoreUserGroupEntity;
import com.utf999.qiangmanger.exception.BizException;
import com.utf999.qiangmanger.service.IQiangService;

public interface IStoreUserGroupService extends IQiangService {
	/**
	 * 创建一个管理员自定义的用户组。
	 * @param companyid 对应的公司编号信息（这样可以找到对应的公司id）
	 * @param groupName 自定义用户分组的名称
	 * @param groupRemark 可能的用户组描述信息
	 */
	public void createStoreUserGroup(String companyid , String groupName , String groupRemark) throws BizException;
	
	/**
	 * 当一个公司被创建的时候，这个方法用于初始化这个公司的“系统级用户组”
	 * @param company 要进行初始化的公司信息
	 * @throws BizException
	 */
	public void initDefaultStoreUserGroup(CompanyEntity company) throws BizException;
	
	/**
	 * 对指定的用户自定义分组进行修改。注意只能修改分组名和分组描述；系统定义的默认分组是不允许修改的。
	 * @param groupid 指定的用户自定义分组
	 * @param groupName 新的分组名
	 * @param groupRemark 新的分组说明（可以没有）
	 */
	public void modifyStoreUserGroup(String groupid , String groupName , String groupRemark)  throws BizException;
	
	/**
	 * 修改指定的用户自定义分组的状态。如果是正常则改为禁用；如果是禁用则改为正常
	 * @param groupid 指定的用户自定义分组
	 */
	public void modifyUserGroupStatus(String groupid) throws BizException;
	
	/**
	 * 将一个指定的用户添加到一个指定的用户组中。<br>
	 * 注意，如果这个用户已经在这个用户组中了，系统将会报错。
	 * @param userid 指定的用户编号
	 * @param groupids 指定的用户分组编号(可以只有一个，可以有多个，但是不能没有)
	 * @throws BizException
	 */
	public void bindUsergroupMapping (String userid , String... groupids) throws BizException;
	
	/**
	 * 将一个指定的用户和一个指定的用户组解除绑定关系。
	 * @param userid 指定的用户编号
	 * @param groupids 指定的用户分组编号(可以只有一个，可以有多个，但是不能没有)
	 * @throws BizException
	 */
	public void unbindUsergroupMapping (String userid , String... groupids) throws BizException;
	
	/**
	 * 按照公司id查询对应的用户组信息（无论用户组的状态怎样）
	 * @param companyid 指定的公司id
	 * @return
	 * @throws BizException
	 */
	public List<StoreUserGroupEntity> queryStoregroupByCompanyid(String companyid) throws BizException;
	
	/**
	 * 按照用户编号，查询当前用户已经属于了哪些状态正常的用户组（注意，是状态正常的）
	 * @param userid 指定的用户组编号
	 * @return
	 * @throws BizException
	 */
	public List<StoreUserGroupEntity> queryStroegroupByUserid(String userid) throws BizException;
	
	/**
	 * 按照工单组编号，查询当前哪些用户组已经绑定了这个指定的“工单组”
	 * @param ordertypeid 工单组编码
	 * @return 符合条件的用户组信息将被返回
	 * @throws BizException
	 */
	public List<StoreUserGroupEntity> queryStroegroupByOrderTypeid(String ordertypeid) throws BizException;
}
